<?php

/** Note : il faut savoir que la structure d'une classe PHP5 est très similaire à
une classe Java. On y retrouve les mêmes principes de Programmation Orientée
Objet et sensiblement les mêmes mots-clés.
**/
class Country {
    # Déclaration des variables d’après la BDD
    private $id;
    private $name;
    private $iso;
    # Constructeur
    # On peut instancier un objet existant en passant son ID (new Director(4))
    # Ou en créer un nouveau (sans passer de paramètre)
    public function __construct($id='') {
        if($id != '') {
            $this->id = $id;
            $this->load();
        }
    }
    # Chargement depuis la BDD
    public function load() {
        if(!empty($this->id)) {
            $db = Database::getInstance();
          	$sql = 'SELECT *
                    FROM `country`
                    WHERE id = :id';
			$sth = $db->prepare($sql);
			$sth->execute(array('id' => $this->id));
				
			if($result = $sth->fetch())
			{
				# On remplit l'objet grâce aux attributs récupérés
				$this->name	= ucwords(strtolower($result['name']));
				$this->iso	= strtolower($result['iso2']);
				
				return true;
           	}
				
            return false;
        }
    }
	
	public function getId()
	{
		return $this->id;
	}
	
	public function getName()
	{
		return $this->name;
	}
	
	public function getIso()
	{
		return $this->iso;
	}
	
	public function getFlag()
	{
		return MEDIA_PATH.'img/flags/'.$this->iso.'.gif';
	}
	public function getFlagHtml()
	{
		return '<img src="'.$this->getFlag().'" title="'.$this->getName().'" alt="'.$this->getName().'" class="flag" />';
	}
	
	/**************** SETTERS ***************/
	public function setName($name)
	{
		$this->name = $name;
	}
	
	public function toArray()
	{
		$a = Array();
		foreach($this as $key => $val)
		{
			$a[$key] = $val;
		}
		return $a;
	}
		
	public function save()
	{
		$array = $this->toArray();
		
		// Si l'objet est dans la base de données alors faire un update
		// Sinon faire un insert
		$db = Database::getInstance();
		$sql = 'INSERT INTO `country` (id, name) values(:id, :name) ON DUPLICATE KEY UPDATE name = :name';
		$sth = $db->prepare($sql);
		$count = $sth->execute($array);
			
		if($count ==0)
			return false;
			
		return true;
	}
	
	public function getAll()
	{
		$countries=array();
		$db = Database::getInstance();
		
		$sql = 'SELECT * FROM `country`';
		$sth = $db->prepare($sql);
		$sth->execute(array());
	
		if($result = $sth->fetchAll())
		{
			foreach($result as $line)
			{
				$country = new Country();
				
				# On remplit l'objet grâce aux attributs récupérés
				$country->id = $line['id'];
				$country->name = ucwords(strtolower($line['name']));
				$country->iso	= strtolower($line['iso2']);
			
				$countries[]=$country;
			}
		}
		return $countries;
	}
	
    # Méthode surchargée pour l'affichage de l'objet : echo $obj;
    public function __toString() {
        return (string)$this->name;
    }
}
?>
